import http from 'wechat-http'

// 配置接口的基础地址
http.baseURL = 'https://live-api.itheima.net'

// 配置请求拦截器
http.intercept.request = (params) => {
  // 1.1 获取token
  const { token } = getApp()
  // 1.2 创建一个默认的header对象<方便扩展>
  const defualtHeader = {}
  // 1.3 判断是否有token, 有token则添加token
  if (token) defualtHeader.Authorization = token
  // 1.4 合并自定义头信息和公共头信息
  params.header = Object.assign(defualtHeader, params.header)
  return params
}

// 配置响应拦截器
// statusCode:  http 响应状态码
// config: 本次发起请求时的参数
// data: 响应结果
http.intercept.response = async ({ statusCode, config, data }) => {
  const app = getApp()
  // 1. 判断token是否失效
  if (statusCode === 401) {
    // ----------------------
    // 2. 判断本次请求是否是调用刷新token的接口(token和refreshtoken都失效)
    if (config.url.includes('refreshToken')) {
      // 2.1 获取页面栈
      const pageStack = getCurrentPages()
      // 2.2 取出最后一个页面对应的页面对象
      const currentPage = pageStack[pageStack.length - 1]
      // 2.3 取出页面路径
      const currentPagePath = currentPage.route
      // 跳转到登录页
      return wx.redirectTo({
        url: `/pages/login/index?redirectURL=/${currentPagePath}`,
      })
    }
    // ----------------------
    // 1.1 调用刷新token的接口
    const res = await wx.http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        Authorization: app.refreshToken,
      },
    })
    // console.log(res)

    // 1.2 把最新的token和refreshToken更新到全局和本地
    app.setToken(res.data.token, res.data.refreshToken)

    // -----------------------------
    // 3. 把之前的网络请求再次发送(无感请求)
    // console.log(config, app.token)
    return wx.http(Object.assign(config, { header: { Authorization: app.token } }))
  }
  return data
}

// 默认导出
export default http

// 挂载到全局的wx对象上
wx.http = http
